﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Helper;
using System.ComponentModel;
namespace CoreData
{
    public class Student
    {
        //[Description("ID")]
        public long ID { get; set; }
        [Description("Mã học viên")]
        public string Code { get; set; }
        [Description("Tên học viên")]
        public string Name { get; set; }
        [Description("Họ")]
        public string FirstName { get; set; }
        [Description("Tên")]
        public string LastName { get; set; }
        [Description("Địa chỉ")]
        public string Address { get; set; }
        [Description("Nơi sinh")]
        public string PlaceOfBirth { get; set; }
        [Description("Tỉnh thường trú")]
        public string Province { get; set; }
        [Description("Điện thoại")]
        public string Phone { get; set; }
        [Description("Email")]
        public string Email { get; set; }
       // [Description("Sex")]
        public bool Sex { get; set; }
        [Description("CMND")]
        public string IndentifyNumber { get; set; }
        [Description("Ngày sinh")]
        public string DateOfBirth { get; set; }
        public DateTime RegisterDate { get; set; }
        [Description("Ngày đăng ký nhập học")]
        public DateTime DateOfAdmission { get; set; }
        [Description("Ngày bảo lưu")]
        public DateTime DateOfReserved { get; set; }
        [Description("Ngày nghỉ luôn")]
        public DateTime DateOfOff { get; set; }
        [Description("Ngày tốt nghiệp")]
        public DateTime DateOfCompleted { get; set; }
        [Description("Ghi chú")]
        public string Note { get; set; }
        [Description("Khóa tặng")]
        public string CourseBonus { get; set; }
    //    [Description("ClassID")]
        public long ClassID { get; set; }
      //  [Description("Status")]
        public long Status { get; set; }
        [Description("Học phí tặng")]
        public int Bonus { get; set; }
        [Description("Giảm giá")]
        public int Discount { get; set; }
        public long TotalFee { get; set; }//tong học phí phải đóng
        public int OriginalFee { get; set; }
      //  [Description("InfoStatus")]
        public bool InfoStatus { get; set; }
     //   [Description("ChannelInfoID")]
        public long ChannelInfoID { get; set; }
     //   [Description("TypeOfFee")]
        public int TypeOfFee { get; set; }

        public bool AppforAdmission { get; set; }//biến này để xác định học viên đã nộp đơn xin nhập học hay chưa
        public bool SpecifiedTable { get; set; } //biến này để xác định học viên đã nộp bảng quy định nhập học hay chưa
        public bool CMND { get; set; } //biến này để xác định học viên đã nộp CMND hay chưa
        public bool Image4x6 { get; set; } // biến này để xác định học viên đã nộp 4 ảnh 4x6 hay chưa
        public bool ContractEdu { get; set; } // biến này để xác định học viên đã nộp hợp đồng đào tạo hay chưa
        [Description("Khóa lại")]
        public bool Active { get; set; }
        public long TempStudentID { get; set; }
        public bool IsCompleted { get; set; }
        public bool IsDeleted { get; set; }
        [Description("Giới tính")]
        public string SexExt { get; set; }
        [Description("Lớp")]
        public string ClassExt { get; set; }
        [Description("Khóa")]
        public string CourseExt { get; set; }
        [Description("Ngành học")]
        public string BranchExt { get; set; }
        [Description("Kênh thông tin")]
        public string ChannelExt { get; set; }
        [Description("Hình thức đóng học phí")]
        public string TypeOfFeeExt { get; set; }
        [Description("Trang thái")]
        public string StatusExt { get; set; }
        [Description("...")]
        public string ColorStatusExt { get; set; } // màu trạng thái hiển thị
        [Description("Ngành")]
        public string ParentExt { get; set; }
        [Description("Giáo viên")]
        public string TeacherExt { get; set; }
        [Description("Giờ học")]
        public string TimeExt { get; set; }

        public Student()
        {
            Code = "";
            Name = "";
            Address = "";
            Phone = "";
            Email = "";
            IndentifyNumber = "";
            Note = "";
            IsDeleted = false;
            RegisterDate = DateTime.Now;
            IsCompleted = false;
        }

        static Student DynamicCast<T>(object row_data, object row_header) where T : Student
        {
            // row_data : DataRow
            // row_header : DataColumnCollection
            Student ret = new Student();
            DataRow dt = (DataRow)row_data;

            foreach (DataColumn column in (DataColumnCollection)row_header)
            {
                switch (column.ColumnName)
                {
                    case "ID":
                        ret.ID = ConvertObject.ToLong(dt[column]);
                        break;
                    case "Code":
                        ret.Code = ConvertObject.ToString(dt[column]);
                        break;
                    case "Name":
                        ret.Name = ConvertObject.ToString(dt[column]);
                        break;
                    case "Address":
                        ret.Address = ConvertObject.ToString(dt[column]);
                        break;
                    case "Phone":
                        ret.Phone = ConvertObject.ToString(dt[column]);
                        break;
                    case "Email":
                        ret.Email = ConvertObject.ToString(dt[column]);
                        break;
                    case "Sex":
                        {
                            ret.Sex = ConvertObject.ToBool(dt[column]);
                            if (ret.Sex)
                                ret.SexExt = "Nam";
                            else
                                ret.SexExt = "Nữ";
                        }
                        break;
                    case "IndentifyNumber":
                        ret.IndentifyNumber = ConvertObject.ToString(dt[column]);
                        break;
                    case "DateOfBirth":
                        ret.DateOfBirth = ConvertObject.ToString(dt[column]);
                        break;
                    case "DateOfAdmission":
                        ret.DateOfAdmission = ConvertObject.ToDateTime(dt[column]);
                        break;
                    case "Note":
                        ret.Note = ConvertObject.ToString(dt[column]);
                        break;
                    case "ClassID":
                        ret.ClassID = ConvertObject.ToLong(dt[column]);
                        break;
                    case "Status":
                        ret.Status = ConvertObject.ToLong(dt[column]);
                        break;
                    case "Discount":
                        ret.Discount = ConvertObject.ToInt(dt[column]);
                        break;
                    case "InfoStatus":
                        ret.InfoStatus = ConvertObject.ToBool(dt[column]);
                        break;
                    case "ChannelInfoID":
                        ret.ChannelInfoID = ConvertObject.ToLong(dt[column]);
                        break;
                    case "Active":
                        ret.Active = ConvertObject.ToBool(dt[column]);
                        break;
                    case "TypeOfFee":
                        {
                            ret.TypeOfFee = ConvertObject.ToInt(dt[column]);
                            if (ret.TypeOfFee == 1)
                            {
                                ret.TypeOfFeeExt = "Đóng một lần";
                            }
                            if (ret.TypeOfFee == 2)
                            {
                                ret.TypeOfFeeExt = "Đóng hai lần";
                            }
                            if (ret.TypeOfFee == 3)
                            {
                                ret.TypeOfFeeExt = "Đóng ba lần";
                            }
                            if (ret.TypeOfFee == 4)
                            {
                                ret.TypeOfFeeExt = "Đóng bốn lần";
                            }
                            if (ret.TypeOfFee == 6)
                            {
                                ret.TypeOfFeeExt = "Đóng sáu lần";
                            }
                        }
                        break;
                    case "Classname":
                        ret.ClassExt = ConvertObject.ToString(dt[column]);
                        break;
                    case "CourseName":
                        ret.CourseExt = ConvertObject.ToString(dt[column]);
                        break;
                    case "BranchName":
                        ret.BranchExt = ConvertObject.ToString(dt[column]);
                        break;
                    case "statusname":
                        ret.StatusExt = ConvertObject.ToString(dt[column]);
                        break;
                    case "channelName":
                        ret.ChannelExt = ConvertObject.ToString(dt[column]);
                        break;
                    case "Bonus":
                        ret.Bonus = ConvertObject.ToInt(dt[column]);
                        break;
                    case "AppforAdmission":
                        ret.AppforAdmission = ConvertObject.ToBool(dt[column]);
                        break;
                    case "SpecifiedTable":
                        ret.SpecifiedTable = ConvertObject.ToBool(dt[column]);
                        break;
                    case "CMND":
                        ret.CMND = ConvertObject.ToBool(dt[column]);
                        break;
                    case "Image4x6":
                        ret.Image4x6 = ConvertObject.ToBool(dt[column]);
                        break;
                    case "IsDeleted":
                        ret.IsDeleted = ConvertObject.ToBool(dt[column]);
                        break;
                    case "FirstName":
                        ret.FirstName = ConvertObject.ToString(dt[column]);
                        break;
                    case "LastName":
                        ret.LastName = ConvertObject.ToString(dt[column]);
                        break;
                    case "ContractEdu":
                        ret.ContractEdu = ConvertObject.ToBool(dt[column]);
                        break;
                    case "PlaceOfBirth":
                        ret.PlaceOfBirth = ConvertObject.ToString(dt[column]);
                        break;
                    case "Province":
                        ret.Province = ConvertObject.ToString(dt[column]);
                        break;
                    case "RegisterDate":
                        ret.RegisterDate = ConvertObject.ToDateTime(dt[column]);
                        break;
                    case "IsCompleted":
                        ret.IsCompleted = ConvertObject.ToBool(dt[column]);
                        break;
                    case "TotalFee":
                        ret.TotalFee = ConvertObject.ToLong(dt[column]);
                        break;
                    case "OriginalFee":
                        ret.OriginalFee = ConvertObject.ToInt(dt[column]);
                        break;
                    case "Parent":
                        ret.ParentExt = ConvertObject.ToString(dt[column]);
                        break;
                    case "CourseBonus":
                        ret.CourseBonus = ConvertObject.ToString(dt[column]);
                        break;
                    case "Teacher":
                        ret.TeacherExt = ConvertObject.ToString(dt[column]);
                        break;
                    case "Time":
                        ret.TimeExt = ConvertObject.ToString(dt[column]);
                        break;
                    case "TempStudentID":
                        ret.TempStudentID = ConvertObject.ToLong(dt[column]);
                        break;
                    case "DateOfCompleted":
                        ret.DateOfCompleted = ConvertObject.ToDateTime(dt[column]);
                        break;
                    case "DateOfOff":
                        ret.DateOfOff = ConvertObject.ToDateTime(dt[column]);
                        break;
                    case "DateOfReserved":
                        ret.DateOfReserved = ConvertObject.ToDateTime(dt[column]);
                        break;
                    default:
                        break;
                }
            }

            return ret;
        }

    }
}
